package com.pinyougou.sellergoods.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.ISelect;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pinyougou.common.pojo.PageResult;
import com.pinyougou.mapper.ItemCatMapper;
import com.pinyougou.pojo.ItemCat;
import com.pinyougou.service.ItemCatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

@Service(interfaceName = "com.pinyougou.service.ItemCatService")
@Transactional
public class ItemCatServiceImpl implements ItemCatService{

    //注入ItemCatDao的r
    @Autowired
    private ItemCatMapper itemCatMapper;
    /**
     * 保存添加的数据
     *
     * @param itemCat
     */
    @Override
    public void save(ItemCat itemCat) {

        try {
            itemCatMapper.insertSelective(itemCat);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 保存修改数据
     *
     * @param itemCat
     */
    @Override
    public void update(ItemCat itemCat) {
        try {
            itemCatMapper.updateByPrimaryKeySelective(itemCat);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /**
     * 根据主键id删除
     *
     * @param id
     */
    @Override
    public void delete(Serializable id) {

    }

    /**
     * 批量删除
     *
     * @param ids
     */
    @Override
    public void deleteAll(Serializable[] ids) {
           /* //创建示范对象
            Example example =new Example(ItemCat.class);
            //创建条件对象
            Example.Criteria criteria = example.createCriteria();
            //添加in条件
            criteria.andIn("id", Arrays.asList(ids));
            //删除添加
            itemCatMapper.deleteByExample(example);*/

    }
    //下面的也是批量删除
    /**
     * 批量删除
     *
     * @param ids
     */
    @Override
    public void deleteItemCat(Long[] ids) {
        try {
            //创建一个集合来存储id的数据
            List<Long> idLists =new ArrayList<>();
            for (Long id : ids) {

                idLists.add(id);
                //利用递归来将每一层的id对应值删除数据
                findLeafNode(id,idLists);
            }

            //批量删除数据
            itemCatMapper.deleteById(idLists);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    
    public void findLeafNode(Long id,List<Long> idLists){
        
        //根据id来查找下一级的数据
        List<ItemCat> itemCatList = findItemCatByParentId(id);

        if(itemCatList!=null && itemCatList.size()>0){

            for (ItemCat itemCat : itemCatList) {
                idLists.add(itemCat.getId());
                //递归，继续查询下一级的id,并且将下一级的id加入到集合中，
                findLeafNode(itemCat.getId(),idLists);

            }

        }



    }

   



    /**
     * 根据主键id查询
     *
     * @param id
     */
    @Override
    public ItemCat findOne(Serializable id) {
        return null;
    }

    /**
     * 查询全部
     */
    @Override
    public List<ItemCat> findAll() {
        return null;
    }

    /**
     * 多条件分页查询
     *
     * @param itemCat
     * @param page
     * @param rows
     */
    @Override
    public List<ItemCat> findByPage(ItemCat itemCat, int page, int rows) {
        return null;
    }

    /**
     * 根据父级的id查询数据
     *
     * @param parentId
     */
    @Override
    public List<ItemCat> findItemCatByParentId(Long parentId) {

        try {
            //创建一个ItemCat对象，为了方便封装条件查询
            ItemCat itemCat =new ItemCat();
            itemCat.setParentId(parentId);
            return itemCatMapper.select(itemCat);

        } catch (Exception e) {
            throw new RuntimeException(e);
        }


    }
}
